Oracle 表类型变量的使用 您所在的位置:网站首页 oracle list类型 Oracle 表类型变量的使用

Oracle 表类型变量的使用

2024-05-31 12:55| 来源: 网络整理| 查看: 265

使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。 创建表类型的语法如下: TYPE table_name IS TABLE OF data_type [ NOT NULL ] INDEX BY BINARY_INTEGER ; 语法说明如下: --table_name  创建的表类型名称。 --IS TABLE  表示创建的是表类型。 --data_type  可以是任何合法的PL/SQL数据类型,例如varchar2。 --INDEX BY BINARY_INTEGER  指定系统创建一个主键索引,用于引用表类型变量中的特定行。

使用表类型的例子:

例一:直接对表类型变量赋值

declare type my_emp is table of scott.emp%rowtype index by binary_integer; new_emp my_emp; begin new_emp(1).empno:=6800; new_emp(1).ename:='tracy'; new_emp(1).job:='clerk'; new_emp(1).sal:=2500; new_emp(2).empno:=6900; new_emp(2).ename:='luck'; new_emp(2).job:='manager'; new_emp(2).sal:=4000; dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job|| ','||new_emp(1).sal); dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job|| ','||new_emp(2).sal); end; /

例二:使用表类型变量的方法:变量名.方法名[索引号]

declare type my_emp is table of scott.emp%rowtype index by binary_integer; new_emp my_emp; begin new_emp(1).empno:=6800; new_emp(1).ename:='tracy'; new_emp(1).job:='clerk'; new_emp(1).sal:=2500; new_emp(2).empno:=6900; new_emp(2).ename:='luck'; new_emp(2).job:='manager'; new_emp(2).sal:=4000; dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last); dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job|| ','||new_emp(1).sal); dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job|| ','||new_emp(2).sal); --new_emp.delete(1); dbms_output.put_line(new_emp.next(1)); end; //

例三:与游标结合使用 declare type my_emp is table of scott.emp%rowtype index by binary_integer; new_emp my_emp; v_num number:=0; cursor cur_emp is select empno,ename,job,sal from scott.emp;

begin for v_emp in cur_emp loop v_num:=v_num+1; select * into new_emp(v_num) from scott.emp where ename=v_emp.ename; end loop;

for i in 1..new_emp.count loop dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job|| ','||new_emp(i).sal); end loop;

end; / 注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要使用下标,如上面的的例子。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有